/**
 * 测站搜索 API 封装
 */

// 检索召回接口基础URL
const SEARCH_API_BASE = 'https://ws.waterism.tech:8091'
// 详情接口基础URL
const DETAIL_API_BASE = 'https://ws.waterism.tech:8090'

/**
 * 站点类型中文映射
 * 支持两种格式：简写代码（RR）和全称（RESERVOIR）
 */
export const STATION_TYPE_MAP = {
  // 简写代码
  'RR': '水库',
  'PP': '雨量站',
  'ZZ': '水文站',
  'ZQ': '水位流量站',
  'DD': '堰闸',
  'TT': '潮位站',
  'SS': '泥沙站',
  'MM': '气象站',
  'DP': '闸坝',
  'BB': '地下水站',
  'HH': '墒情站',
  'WQ': '水质站',
  // 全称（搜索接口返回格式）
  'RESERVOIR': '水库',
  'RAINFALL': '雨量站',
  'HYDROLOGICAL': '水文站',
  'WATER_LEVEL': '水位站',
  'SLUICE': '堰闸',
  'TIDE': '潮位站',
  'SEDIMENT': '泥沙站',
  'METEOROLOGICAL': '气象站',
  'DAM': '闸坝',
  'GROUNDWATER': '地下水站',
  'SOIL_MOISTURE': '墒情站',
  'WATER_QUALITY': '水质站'
}

/**
 * 获取站点类型中文名称
 * @param {string} type 站点类型代码
 * @returns {string} 中文名称
 */
export function getStationTypeName(type) {
  return STATION_TYPE_MAP[type] || type || '未知'
}

/**
 * 自动补全建议
 * 根据用户输入前缀返回最佳匹配的单个建议
 * @param {string} prefix 输入前缀
 * @param {number} limit 返回数量限制，默认1
 * @returns {Promise<Object|null>} 建议结果，无匹配返回 null
 */
export async function suggestStation(prefix, limit = 1) {
  if (!prefix || !prefix.trim()) {
    return null
  }
  
  const url = `${SEARCH_API_BASE}/api/entity/suggest?prefix=${encodeURIComponent(prefix)}&limit=${limit}`
  
  try {
    const response = await fetch(url, {
      method: 'GET',
      headers: {
        'accept': 'application/json'
      }
    })
    
    if (!response.ok) {
      throw new Error(`建议请求失败: ${response.status}`)
    }
    
    const result = await response.json()
    return result.match // 返回 match 对象或 null
  } catch (error) {
    console.error('获取建议失败:', error)
    return null
  }
}

/**
 * 搜索测站
 * @param {string} query 搜索关键词
 * @param {number} limit 返回数量限制，默认10
 * @returns {Promise<Object>} 搜索结果
 */
export async function searchStations(query, limit = 10) {
  if (!query || !query.trim()) {
    return { query: '', count: 0, matches: [] }
  }
  
  const url = `${SEARCH_API_BASE}/api/entity/match?q=${encodeURIComponent(query)}&limit=${limit}`
  
  try {
    const response = await fetch(url, {
      method: 'GET',
      headers: {
        'accept': 'application/json'
      }
    })
    
    if (!response.ok) {
      throw new Error(`搜索请求失败: ${response.status}`)
    }
    
    return await response.json()
  } catch (error) {
    console.error('搜索测站失败:', error)
    throw error
  }
}

/**
 * 获取测站详情
 * @param {string} stcd 测站编码
 * @returns {Promise<Object>} 测站详情
 */
export async function getStationDetail(stcd) {
  if (!stcd) {
    throw new Error('测站编码不能为空')
  }
  
  const url = `${DETAIL_API_BASE}/api/query_station_cache?stcd=${encodeURIComponent(stcd)}`
  
  try {
    const response = await fetch(url, {
      method: 'GET',
      headers: {
        'accept': 'application/json'
      }
    })
    
    if (!response.ok) {
      throw new Error(`获取详情失败: ${response.status}`)
    }
    
    const result = await response.json()
    
    if (!result.success) {
      throw new Error(result.message || '获取详情失败')
    }
    
    return result.data
  } catch (error) {
    console.error('获取测站详情失败:', error)
    throw error
  }
}

export default {
  suggestStation,
  searchStations,
  getStationDetail,
  getStationTypeName,
  STATION_TYPE_MAP
}

